Otključajte globalni doseg pomoću JavaScript Intl API-ja. Naučite najbolje prakse internacionalizacije za formatiranje datuma, brojeva, valuta i više, osiguravajući besprijekorno korisničko iskustvo širom svijeta.
JavaScript Intl API: Najbolje prakse internacionalizacije za globalnu publiku
U današnjem međusobno povezanom svijetu, stvaranje web aplikacija koje su namijenjene globalnoj publici je ključno. JavaScript Intl API pruža moćne alate za internacionalizaciju (i18n), omogućujući vam formatiranje datuma, brojeva, valuta i više u skladu s konvencijama različitih lokacija. Ovaj članak istražuje najbolje prakse za iskorištavanje Intl API-ja za izgradnju uistinu globalnih aplikacija.
Razumijevanje internacionalizacije (i18n) i lokalizacije (l10n)
Prije nego što zaronimo u specifičnosti Intl API-ja, važno je razumjeti razliku između internacionalizacije (i18n) i lokalizacije (l10n). I18n je proces dizajniranja i razvoja aplikacija na način da se mogu lako prilagoditi različitim jezicima i regijama bez potrebe za inženjerskim promjenama. L10n, s druge strane, je proces prilagođavanja internacionalizirane aplikacije za određenu lokaciju prevođenjem teksta i prilagođavanjem drugih elemenata specifičnih za lokaciju.
Intl API se fokusira na i18n aspekt, pružajući mehanizme za rukovanje podacima osjetljivim na lokaciju, dok lokalizacija obično uključuje pružanje prijevoda i konfiguracija specifičnih za lokaciju.
Ključne komponente Intl API-ja
Intl API se sastoji od nekoliko ključnih objekata, od kojih je svaki odgovoran za rukovanje specifičnim aspektima internacionalizacije:
- Intl.Collator: Za uspoređivanje nizova na način osjetljiv na lokaciju.
- Intl.DateTimeFormat: Za formatiranje datuma i vremena.
- Intl.NumberFormat: Za formatiranje brojeva, uključujući valute i postotke.
- Intl.PluralRules: Za rukovanje pravilima množine na različitim jezicima.
- Intl.ListFormat: Za formatiranje popisa na način osjetljiv na lokaciju.
- Intl.RelativeTimeFormat: Za formatiranje relativnih vremena (npr. "jučer", "za 2 sata").
Najbolje prakse za korištenje Intl API-ja
Da biste učinkovito iskoristili Intl API i osigurali pozitivno korisničko iskustvo za svoju globalnu publiku, razmotrite sljedeće najbolje prakse:
1. Odredite ispravnu lokaciju
Temelj internacionalizacije je određivanje ispravne lokacije. Lokacija identificira jezik, regiju i sve specifične varijante koje će se koristiti za formatiranje. Možete dobiti preferiranu lokaciju korisnika iz svojstva navigator.language
ili HTTP zaglavlja Accept-Language
.
Prilikom stvaranja Intl objekata, možete odrediti lokaciju kao niz ili niz nizova. Ako pružite niz, API će pokušati pronaći najbolju odgovarajuću lokaciju iz dostupnih opcija.
Primjer:
const locale = navigator.language || 'en-US';
const numberFormat = new Intl.NumberFormat(locale);
Ako preferirana lokacija korisnika nije dostupna, možete pružiti rezervnu lokaciju. Na primjer, možete koristiti 'en-US' kao zadano ako preglednik korisnika prijavi nepodržanu lokaciju.
2. Iskoristite Intl.DateTimeFormat za formatiranje datuma i vremena
Ispravno formatiranje datuma i vremena ključno je za pružanje lokaliziranog iskustva. Objekt Intl.DateTimeFormat
omogućuje vam formatiranje datuma i vremena u skladu s konvencijama određene lokacije.
Možete prilagoditi formatiranje određivanjem različitih opcija, kao što su format godine, mjeseca, dana, sata, minute i sekunde. Također možete odrediti vremensku zonu kako biste osigurali da se datumi i vremena prikazuju ispravno za korisnike u različitim dijelovima svijeta.
Primjer:
const locale = 'de-DE'; // Njemački (Njemačka)
const date = new Date();
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
timeZone: 'Europe/Berlin'
};
const dateTimeFormat = new Intl.DateTimeFormat(locale, options);
const formattedDate = dateTimeFormat.format(date); // Izlaz: z.B. "22. Mai 2024, 14:30"
console.log(formattedDate);
Ovaj primjer formatira trenutni datum i vrijeme prema njemačkoj (Njemačka) lokaciji, uključujući godinu, mjesec, dan, sat i minutu. Također određuje vremensku zonu 'Europe/Berlin'.
Ne zaboravite razmotriti različite formate datuma i vremena koji se koriste širom svijeta. Na primjer, SAD koristi MM/DD/YYYY, dok mnoge druge zemlje koriste DD/MM/YYYY.
3. Koristite Intl.NumberFormat za formatiranje brojeva, valuta i postotaka
Objekt Intl.NumberFormat
pruža fleksibilan način za formatiranje brojeva, valuta i postotaka u skladu s konvencijama specifičnim za lokaciju. Možete prilagoditi formatiranje određivanjem opcija kao što su valuta, stil (decimalni, valuta ili postotak), minimalni i maksimalni broj decimalnih znamenki i više.
Primjer (Formatiranje valute):
const locale = 'ja-JP'; // Japanski (Japan)
const amount = 12345.67;
const options = {
style: 'currency',
currency: 'JPY'
};
const numberFormat = new Intl.NumberFormat(locale, options);
const formattedAmount = numberFormat.format(amount); // Izlaz: z.B. "¥12,346"
console.log(formattedAmount);
Ovaj primjer formatira broj 12345.67 kao japanski jen (JPY). Primijetite kako se simbol valute (¥) i separator grupiranja (,) automatski prilagođavaju prema japanskoj lokaciji.
Primjer (Formatiranje postotka):
const locale = 'ar-EG'; // Arapski (Egipat)
const percentage = 0.75;
const options = {
style: 'percent',
minimumFractionDigits: 2
};
const numberFormat = new Intl.NumberFormat(locale, options);
const formattedPercentage = numberFormat.format(percentage); // Izlaz: z.B. "٧٥٫٠٠٪"
console.log(formattedPercentage);
Ovaj primjer formatira broj 0.75 kao postotak na arapskom (Egipat). Izlaz uključuje arapski znak za postotak (٪) i dva decimalna mjesta.
Važna razmatranja za formatiranje valute:
- Kodovi valuta: Koristite ispravne ISO 4217 kodove valuta (npr. USD, EUR, JPY).
- Položaj simbola: Imajte na umu da se položaj simbola valute razlikuje ovisno o lokaciji (npr. prije ili poslije iznosa).
- Decimalni separatori i separatori grupiranja: Razumijte različite konvencije za decimalne separatore (npr. točka ili zarez) i separatore grupiranja (npr. zarez ili točka).
4. Ispravno rukujte množinom pomoću Intl.PluralRules
Pravila množine značajno se razlikuju među jezicima. Na primjer, engleski ima jednostavna pravila s oblicima jednine i množine, dok drugi jezici imaju složenija pravila temeljena na vrijednosti broja. ObjektIntl.PluralRules
pomaže vam da odredite ispravan oblik množine za dani broj i lokaciju.
Primjer:
const locale = 'ru-RU'; // Ruski (Rusija)
const pluralRules = new Intl.PluralRules(locale);
function getPluralForm(count) {
const rule = pluralRules.select(count);
switch (rule) {
case 'one': return 'товар'; // tovar (jednina)
case 'few': return 'товара'; // tovara (nekoliko)
case 'many': return 'товаров'; // tovarov (mnogo)
default: return 'товаров'; // Zadano na mnogo
}
}
const count = 5;
const pluralForm = getPluralForm(count);
console.log(`${count} ${pluralForm}`); // Izlaz: "5 товаров"
Ovaj primjer pokazuje kako koristiti Intl.PluralRules
za dobivanje ispravnog oblika množine za riječ "товар" (stavka) na ruskom. Ruski ima različite oblike množine, ovisno o tome završava li broj na 1, 2-4 ili 5-9.
5. Formatirajte popise pomoću Intl.ListFormat
Prilikom prikazivanja popisa stavki, formatiranje se može razlikovati ovisno o lokaciji. Objekt Intl.ListFormat
omogućuje vam formatiranje popisa u skladu s konvencijama specifičnim za lokaciju, uključujući upotrebu različitih veznika (npr. "i", "ili") i separatora popisa (npr. zarezi, točke-zarezi).
Primjer:
const locale = 'es-ES'; // Španjolski (Španjolska)
const list = ['manzanas', 'naranjas', 'plátanos'];
const listFormat = new Intl.ListFormat(locale, { style: 'long', type: 'conjunction' });
const formattedList = listFormat.format(list); // Izlaz: "manzanas, naranjas y plátanos"
console.log(formattedList);
Ovaj primjer formatira popis voća na španjolskom (Španjolska), koristeći veznik "y" (i) za povezivanje zadnje dvije stavke.
6. Formatirajte relativna vremena pomoću Intl.RelativeTimeFormat
Prikazivanje relativnih vremena (npr. "jučer", "za 2 sata") pruža korisniku prijateljski način prikaza vremenskih informacija. ObjektIntl.RelativeTimeFormat
omogućuje vam formatiranje relativnih vremena u skladu s konvencijama specifičnim za lokaciju.
Primjer:
const locale = 'fr-CA'; // Francuski (Kanada)
const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
console.log(rtf.format(-1, 'day')); // Izlaz: "hier"
console.log(rtf.format(2, 'day')); // Izlaz: "dans 2 jours"
Ovaj primjer formatira relativna vremena na francuskom (Kanada). Izlaz prikazuje "hier" (jučer) i "dans 2 jours" (za 2 dana).
Opcija `numeric` kontrolira kako se brojevi prikazuju. `'auto'` prikazuje relativne riječi kada su dostupne (poput "jučer"), a inače brojeve. `'always'` uvijek prikazuje brojeve.
7. Kolacionirajte nizove pomoću Intl.Collator
Usporedba nizova je osjetljiva na lokaciju. Način na koji se nizovi sortiraju razlikuje se ovisno o jeziku. Na primjer, u njemačkom se znak "ä" obično sortira kao "a", dok se u švedskom sortira nakon "z". Objekt Intl.Collator
omogućuje vam usporedbu nizova prema pravilima određene lokacije.
Primjer:
const locale = 'de-DE';
const collator = new Intl.Collator(locale);
const strings = ['äpfel', 'birnen', 'bananen', 'aprikosen'];
strings.sort(collator.compare);
console.log(strings); // Izlaz: ["äpfel", "aprikosen", "bananen", "birnen"]
Ovaj primjer sortira niz njemačkih riječi pomoću Intl.Collator
. Primijetite da se "äpfel" sortira prije "aprikosen", iako "ä" dolazi kasnije u abecedi.
8. Rukujte rubnim slučajevima i nedostajućim podacima
Ne podržavaju sve lokacije svaki preglednik ili okruženje. Bitno je rukovati rubnim slučajevima u kojima lokacija nije dostupna ili kada podaci nedostaju. Razmotrite sljedeće strategije:
- Pružite rezervne lokacije: Odredite zadanu lokaciju za upotrebu kada preferirana lokacija korisnika nije podržana.
- Graciozno se degradirajte: Ako određene opcije formatiranja nisu podržane za lokaciju, osigurajte razuman povratak. Na primjer, mogli biste prikazati datum u manje detaljnom formatu.
- Koristite blokove try-catch: Zamotajte pozive Intl API-ja u blokove try-catch kako biste graciozno rukovali potencijalnim pogreškama.
9. Temeljito testirajte s različitim lokacijama
Temeljito testiranje ključno je kako biste osigurali da vaša internacionalizirana aplikacija ispravno radi za sve podržane lokacije. Testirajte svoju aplikaciju s različitim lokacijama, uključujući jezike koji koriste različite skupove znakova, formate datuma i vremena, formate brojeva i pravila množine.
Razmislite o upotrebi alata za automatizirano testiranje kako biste provjerili ponaša li se vaša aplikacija prema očekivanjima na različitim lokacijama.
10. Razmotrite implikacije na performanse
Iako je Intl API općenito učinkovit, stvaranje Intl objekata može biti relativno skupo. Da biste optimizirali performanse, razmotrite sljedeće:
- Spremite Intl objekte u predmemoriju: Stvorite Intl objekte jednom i ponovno ih upotrijebite kad god je to moguće, umjesto da stvarate nove objekte za svaku operaciju formatiranja.
- Lijeno učitavanje podataka o lokaciji: Učitajte podatke o lokaciji samo kada su potrebni, umjesto da učitavate sve podatke o lokaciji unaprijed.
Izvan Intl API-ja: Daljnja razmatranja za internacionalizaciju
Iako Intl API pruža moćne alate za formatiranje podataka, internacionalizacija uključuje više od samog formatiranja. Razmotrite sljedeće dodatne aspekte:
- Smjer teksta (RTL/LTR): Podržite jezike s desna na lijevo (RTL) kao što su arapski i hebrejski pomoću CSS-a za prilagodbu izgleda vaše aplikacije.
- Kodiranje znakova: Koristite UTF-8 kodiranje kako biste osigurali da vaša aplikacija može rukovati širokim rasponom znakova.
- Upravljanje prijevodima: Upotrijebite sustav za upravljanje prijevodima kako biste pojednostavili postupak prevođenja teksta vaše aplikacije.
- Kulturološki osjetljiv dizajn: Imajte na umu kulturne razlike pri dizajniranju svoje aplikacije. Na primjer, simbolika boja može se razlikovati među kulturama.
Zaključak
JavaScript Intl API je neprocjenjiv alat za izradu web aplikacija koje su namijenjene globalnoj publici. Slijedeći najbolje prakse navedene u ovom članku, možete stvoriti aplikacije koje nisu samo funkcionalne, već i kulturološki osjetljive i jednostavne za korisnike širom svijeta. Prihvatite snagu Intl API-ja i otključajte potencijal svoje aplikacije na globalnoj sceni. Ovladavanje Intl API-jem rezultirat će inkluzivnijim i pristupačnijim iskustvom za sve vaše korisnike, bez obzira na njihovu lokaciju ili jezik.